package com.common.excel.listener;

import com.common.entity.standvalue.StandValueEntity;
import com.common.excel.ExcelListener;
import com.common.excel.ExcelValueCheckResp;
import com.common.excel.excelinfo.TargetItemExcelInfo;
import com.common.repository.standvalue.StandValueRepository;
import com.common.repository.target.TargetItemRepository;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * 版权片单 Excel Listener
 *
 * @author johnny
 * @create 2020-03-10 下午04:07
 **/
@Slf4j
@Getter
@Service
public class TargetItemExcelListener extends ExcelListener<TargetItemExcelInfo> {

    @Autowired
    private TargetItemRepository targetItemRepository;

    @Autowired
    private StandValueRepository standValueRepository;


    @Override
    protected boolean preProcess(TargetItemExcelInfo targetItemExcelInfo, Integer rowNumber, Map<Integer, List<ExcelValueCheckResp.ErrorInfoResp>> checkRespMap) {
        boolean pass = true;
        String fieldStandValueId = targetItemExcelInfo.getFieldStandValueId();

        long standValueId = NumberUtils.toLong(fieldStandValueId);
        if (standValueId == 0) {
            putErrorInfo(rowNumber, new ExcelValueCheckResp.ErrorInfoResp("标准值需要传 标准值ID 可在指标管理 标准值菜单查看 "), checkRespMap);
            pass = false;
        } else {
            StandValueEntity standValueEntity = standValueRepository.findById(standValueId).orElse(null);
            if (standValueEntity == null) {
                putErrorInfo(rowNumber, new ExcelValueCheckResp.ErrorInfoResp("标准值ID[" + standValueId + "] 未找到对应数据，可在指标管理 标准值菜单查看 "), checkRespMap);
                pass = false;
            }
        }
        return pass;
    }


    //    public TargetItemExcelListener(AccreditPsRepository accreditPsRepository, ICpInfoRepository cpInfoRepository) {
//        this.accreditPsRepository = accreditPsRepository;
//        this.cpInfoRepository = cpInfoRepository;
//    }
//
//    private AccreditPsRepository accreditPsRepository;
//
//    private ICpInfoRepository cpInfoRepository;
//
//
//    @Override
//    public void doSomething(AccreditPsExcelInfo accreditPsExcelInfo) {
//
//        datas.add(accreditPsExcelInfo);
//    }
//
//    /**
//     * 前置处理 主要用户检查 excel的一些参数是否 满足字典表 等等等。。。
//     *
//     * @param accreditPsExcelInfo
//     * @param rowNumber
//     * @param checkRespMap
//     */
//    @Override
//    protected boolean preProcess(AccreditPsExcelInfo accreditPsExcelInfo, Integer rowNumber, Map<Integer, List<ExcelValueCheckResp.ErrorInfoResp>> checkRespMap) {
//        boolean pass = true;
//        //判断Code 是否已经存在
//        if (!StringUtils.isEmpty(accreditPsRepository.findByOutSourceIdAndCpCode(accreditPsExcelInfo.getOutSourceId(), accreditPsExcelInfo.getCpCode()))) {
//            putErrorInfo(rowNumber, new ExcelValueCheckResp.ErrorInfoResp("外部编码  已经存在：" + accreditPsExcelInfo.getOutSourceId()), checkRespMap);
//            pass = false;
//        }
//
//        //判断是否能找到对应的CP
//        if (StringUtils.isEmpty(cpInfoRepository.findByCpCode(accreditPsExcelInfo.getCpCode()))) {
//            putErrorInfo(rowNumber, new ExcelValueCheckResp.ErrorInfoResp("未找到对应的版权方：" + accreditPsExcelInfo.getCpCode()), checkRespMap);
//            log.error("【未找到对应的CPCODE {}】", accreditPsExcelInfo.getCpCode());
//            pass = false;
//        }
//
//        boolean existType = false;
//        for (EnumConst.AccreditTypeEnum accreditTypeEnum : EnumConst.AccreditTypeEnum.values()) {
//            if (accreditTypeEnum.getMsg().equals(accreditPsExcelInfo.getType())) {
//                existType = true;
//                break;
//            }
//        }
//        if (!existType) {
//            putErrorInfo(rowNumber, new ExcelValueCheckResp.ErrorInfoResp("未找到对应的版权类型：" + accreditPsExcelInfo.getType()), checkRespMap);
//            log.error("【未找到对应的版权类型 {}】", accreditPsExcelInfo.getType());
//            pass = false;
//        }
//
//        //授权平台
//        if (StringUtils.isEmpty(accreditPsExcelInfo.getTerminalType())) {
//            putErrorInfo(rowNumber, new ExcelValueCheckResp.ErrorInfoResp("未找到对应的授权平台：" + accreditPsExcelInfo.getTerminalType()), checkRespMap);
//            log.error("【未找到对应的授权平台 {}】", accreditPsExcelInfo.getTerminalType());
//            pass = false;
//        } else {
//            if (Optional.ofNullable(DictionaryAware.TERMINAL_MAP.get(accreditPsExcelInfo.getTerminalType())).isPresent()) {
//                accreditPsExcelInfo.setTerminalType(accreditPsExcelInfo.getTerminalType());
//            } else {
//                String dicMap = DictionaryAware.TERMINAL_MAP.entrySet().stream().map(stringStringEntry -> stringStringEntry.getKey()).reduce((s1, s2) -> s1 + "|" + s2).orElse("");
//                putErrorInfo(rowNumber, new ExcelValueCheckResp.ErrorInfoResp("字典里未找到对应的授权平台：" + accreditPsExcelInfo.getTerminalType() + " 【可选: " + dicMap + "】"), checkRespMap);
//                log.error("【字典里未找到对应的授权平台 {} , 字典:{} 】", accreditPsExcelInfo.getTerminalType(), dicMap);
//                pass = false;
//            }
//        }
//
//        //授权范围
//        if (StringUtils.isEmpty(accreditPsExcelInfo.getArea())) {
//            putErrorInfo(rowNumber, new ExcelValueCheckResp.ErrorInfoResp("未找到对应的授权范围：" + accreditPsExcelInfo.getArea()), checkRespMap);
//            log.error("【未找到对应的授权范围 {}】", accreditPsExcelInfo.getArea());
//            pass = false;
//        } else {
//            if (Optional.ofNullable(DictionaryAware.ACCREDIT_AREA_MAP.get(accreditPsExcelInfo.getArea())).isPresent()) {
//                accreditPsExcelInfo.setArea(accreditPsExcelInfo.getArea());
//            } else {
//                String dicMap = DictionaryAware.ACCREDIT_AREA_MAP.entrySet().stream().map(stringStringEntry -> stringStringEntry.getKey()).reduce((s1, s2) -> s1 + "|" + s2).orElse("");
//                putErrorInfo(rowNumber, new ExcelValueCheckResp.ErrorInfoResp("字典里未找到对应的授权范围：" + accreditPsExcelInfo.getArea() + " 【可选: " + dicMap + "】"), checkRespMap);
//                log.error("【字典里未找到对应的授权范围 {} , 字典:{} 】", accreditPsExcelInfo.getArea(), dicMap);
//                pass = false;
//            }
//        }
//
//        //是否可转授权
//        if (!StringUtils.isEmpty(accreditPsExcelInfo.getAccreditDistribute())) {
//            String sure = "是";
//            String notSure = "否";
//            if (accreditPsExcelInfo.getAccreditDistribute().equals(sure)) {
//                accreditPsExcelInfo.setAccreditDistribute("1");
//            } else if (accreditPsExcelInfo.getAccreditDistribute().equals(notSure)) {
//                accreditPsExcelInfo.setAccreditDistribute("0");
//            } else {
//                putErrorInfo(rowNumber, new ExcelValueCheckResp.ErrorInfoResp("可否可转授权只支持： 【是/否】"), checkRespMap);
//                log.error("【可否可转授权只支持 【是/否】 】");
//                pass = false;
//            }
//        }
//
//        //大分类
//        if(!StringUtils.isEmpty(accreditPsExcelInfo.getProgramType())){
//            if(null != DictionaryAware.PROGRAM_TYPE_MAP.get(accreditPsExcelInfo.getProgramType())){
//                accreditPsExcelInfo.setProgramTypeId(DictionaryAware.PROGRAM_TYPE_MAP.get(accreditPsExcelInfo.getProgramType()));
//            }else{
//                String dicMap = DictionaryAware.PROGRAM_TYPE_MAP.entrySet().stream().map(stringStringEntry -> stringStringEntry.getKey()).reduce((s1, s2) -> s1 + "|" + s2).orElse("");
//                putErrorInfo(rowNumber, new ExcelValueCheckResp.ErrorInfoResp("字典里未找到对应的大分类：" + accreditPsExcelInfo.getProgramType() + "【可选: " +dicMap+ " 】 "), checkRespMap);
//                log.error("【字典里未找到对应的授权范围 {} , 字典:{} 】" , accreditPsExcelInfo.getProgramType(),dicMap);
//                pass = false;
//            }
//        }
//        return pass;
//    }
//
//    /**
//     * TODO  后置处理 给 VGS发送
//     *
//     * @param accreditPsExcelInfo
//     */
//    @Override
//    protected void postProcess(AccreditPsExcelInfo accreditPsExcelInfo) {
//    }
}